<template>
    <Cascader v-model="inputValue" :data="data" :load-data="loadData" @on-change="dataChange" :disabled="disabled"></Cascader>
</template>

<script>
export default {
    props: {
        value: Array,
        disabled: {
            type: Boolean,
            default: false
        }
    },
    data () {
        return {
            data: [],
            
            url1: 'api/user/v1/get/all/department/list',
            url2: 'api/user/v1/get/position/list?department_id=',
            url3: 'api/user/v1/get/position/users?position_id='
        }
    },
    computed: {
        inputValue: {
            get() {
                return this.value
            },
            set(val) {
                this.$emit('input', val)
            }
        }
    },
    methods: {
        
        /************************************************************
         * 
         * 选择用户
         * @param   {data}               所选数据
         * 
         ************************************************************/
        dataChange (data) {
            this.$emit('on-change', data)
        },
        
        /************************************************************
         * 
         * 获取部门
         * 
         ************************************************************/
        departmentDatas(){
            this.$http.get(this.url1).then(val=>{
                let datas = JSON.parse(JSON.stringify(val.data))
                datas.forEach(this.departmentHandle)
            }).catch(err => {
            })
        },
        
        /************************************************************
         * 
         * 部门数据处理
         * @param   {item}               数据
         * @param   {index}              下标
         * 
         ************************************************************/
        departmentHandle(item, index){
            this.data.push({
                value: item.id,
                label: item.department_name.zh?item.department_name.zh:item.department_name.mn,
                children: [],
                state: 1,
                loading:false
            })
        },
        
        /************************************************************
         * 
         * 级连选择
         * @param   {item}                 当前数据
         * @param   {callback}             回调
         * 
         ************************************************************/
        loadData (item, callback) {
            item.loading = true;
            if(item.state == 1){
                this.gangwieData(item, callback)
            }
            if(item.state == 2){
                this.yonghuData(item, callback)
            }
        },
        
        /************************************************************
         * 
         * 获取岗位
         * @param   {item}                 当前数据
         * @param   {callback}             回调
         * 
         ************************************************************/
        gangwieData(item,callback){
            this.$http.get(this.url2 + '[' + item.value + ']').then(val=>{
                let datas = JSON.parse(JSON.stringify(val.data))
                datas.forEach(iten => {
                    item.children.push({
                        value: iten.id,
                        label: iten.position_name.zh?iten.position_name.zh:iten.position_name.mn,
                        children: [],
                        state: 2,
                        loading:false
                    })
                })
                item.loading = false;
                callback();
            }).catch(err => {
            })
        },
        
        /************************************************************
         * 
         * 获取用户
         * @param   {item}                 当前数据
         * @param   {callback}             回调
         * 
         ************************************************************/
        yonghuData(item,callback){
            this.$http.get(this.url3 + '[' + item.value + ']').then(val=>{
                let datas = JSON.parse(JSON.stringify(val.data))
                datas.forEach(iten => {
                    item.children.push({
                        value: iten.id,
                        label: iten.teacher.teacher_name.zh?iten.teacher.teacher_name.zh:iten.teacher.teacher_name.mn,
                    })
                })
                item.loading = false;
                callback();
            }).catch(err => {
            })
        },
    },
    created () {
        this.departmentDatas ()
    },
}
</script>